/*
 * File Name：DateSelectorPopWindow.java
 * Copyright：Copyright 2008-2015 CiWong.Inc. All Rights Reserved.
 * Description： DateSelectorPopWindow.java
 * Modify By：res-dlzhou
 * Modify Date：2015年5月28日
 * Modify Type：Add
 */
package com.meitianhui.convenitenbuy.widget.wheelview;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout.LayoutParams;
import android.widget.PopupWindow;

import com.meitianhui.convenitenbuy.R;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 日期选择器
 * 
 * @author res-dlzhou
 * @version ciwong v.1.0 2015年5月28日
 * @since ciwong v.1.0
 */
public class DateSelectorPopWindow extends MultiseriateWheelView
{
    /** 显示的PopWindow容器 */
    private PopupWindow mPopupWindow;


    /** 结果回调监听 */
    private DateSelectorPopWindowListener mListener;

    /** 当前日期索引 */
    private int curDatetIndex;

    /** 当前小时索引 */
    private int curHourdIndex;

    /** 当前时分索引 */
    private int curMinuteIndex;

    /**
     * @param context
     */
    public DateSelectorPopWindow(Context context,
            DateSelectorPopWindowListener listener)
    {
        super(context);
        init();
        this.mListener = listener;
    }

    /**
     * 显示
     * 
     * @param v
     */
    public void show(View v)
    {
        mPopupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);
        // notifyDataSetChanged();
        setFirstCurrentItem(curDatetIndex);
        setSecondCurrentItem(curHourdIndex);
        setThirdCurrentItem(curMinuteIndex);
    }

    /**
     * 初始化方法
     */
    private void init()
    {
        mPopupWindow = new PopupWindow(getContainerView(),
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
        mPopupWindow.setAnimationStyle(R.style.BottomDialogMenuAnim);
        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
        mPopupWindow.setOutsideTouchable(true);
    }



    @Override
    public void onClickConfirmBtn()
    {
        if (callBackDate())
        {
            mPopupWindow.dismiss();
        }
        else
        {
//            CWToast.centerAlert(mContext, R.string.error_time).show();
        }
    }

    @Override
    public void onClickCancleBtn()
    {
        mPopupWindow.dismiss();
    }

    @Override
    public void onChanged(WheelView wheel, int oldValue, int Value)
    {
        // 日期滑动事件处理
        if (wheel == mFirstWheelView)
        {
            if (Value == 0)
            {// 当日期索引为第一项时(即当天时间，更新限制时间)
                mHourdList.clear();
//                mHourdList.addAll(getHourList(false));
//                mSecondWheelView.notifyDataSetChanged();
                curHourdIndex = 0;
                setSecondCurrentItem(curHourdIndex);
            }
            else if (oldValue == 0)
            {// 当滑出日期第一项时，重新更新不限制时间
                mHourdList.clear();
//                mHourdList.addAll(getHourList(false));
//                mSecondWheelView.notifyDataSetChanged();
            }
        }
        // // 小时滑动事件处理
        // else if (wheel == mSecondWheelView)
        // {
        // if (Value == 0 && mFirstWheelView.getCurrentItem() == 0)
        // {// 当小时索引为第一项时(更新限制时间)
        // mMinuteList.clear();
        // mMinuteList.addAll(getminuteList(5, true));
        // mThirdWheelView.notifyDataSetChanged();
        // curMinuteIndex = 0;
        // setThirdCurrentItem(curMinuteIndex);
        //
        // }
        // else if (oldValue == 0)
        // {
        // // 当滑出小时第一项时，重新更新不限制时间
        // mMinuteList.clear();
        // mMinuteList.addAll(getminuteList(5, false));
        // mThirdWheelView.notifyDataSetChanged();
        // }
        // }
        // else if (wheel == mThirdWheelView)
        // {
        //
        // }
        Log.v("wheel", "oldValue:" + oldValue + "_Value:" + Value);
    }

    /**
     * 初始化时间当前时间
     * 
     * @param
     * @param
     * @param
     */
    public void initDate(int datetIndex, int hourdIndex, int minuteIndex)
    {
        if (datetIndex < mDatetList.size() && hourdIndex < mHourdList.size()
                && minuteIndex < mMinuteList.size())
        {
            this.curDatetIndex = datetIndex;
            this.curHourdIndex = hourdIndex;
            this.curMinuteIndex = minuteIndex;
            setFirstCurrentItem(curDatetIndex);
            setSecondCurrentItem(curHourdIndex);
            setThirdCurrentItem(curMinuteIndex);
            callBackDate();
        }
    }

    /**
     * 
     * 回调日期数据
     * 
     * @return 成功回调返回true
     */
    private boolean callBackDate()
    {
        if (mListener != null)
        {
            curDatetIndex = mFirstWheelView.getCurrentItem();
            curHourdIndex = mSecondWheelView.getCurrentItem();
            curMinuteIndex = mThirdWheelView.getCurrentItem();
            StringBuilder sBuffer = new StringBuilder();
            if (mDatetList != null && mDatetList.size() > 0
                    && mHourdList != null && mHourdList.size() > 0
                    && mMinuteList != null && mMinuteList.size() > 0)
            {
                // 拼接时间
                sBuffer.append(mDatetList.get(curDatetIndex));
                sBuffer.append(" ");
                sBuffer.append(mHourdList.get(curHourdIndex));
                sBuffer.append(":");
                sBuffer.append(mMinuteList.get(curMinuteIndex));
            }

            String dateStr = sBuffer.toString();
            long dateMiliis = getDateMillis(dateStr);
            // 布置时间不小于当前时间一小时
            if (dateMiliis > (getCurrentTimeMillis() + 60 * 60 * 1000))
            {
                // 结果回调
                mListener.onSelectDate(dateStr, dateMiliis);
                return true;
            }
            else
            {
                return false;
            }
        }
        return false;
    }

//    /**
//     * 获取今天之后的日期数据集
//     *
//     * @param count
//     *            获取的天数
//     * @return
//     */
//    @SuppressLint("SimpleDateFormat")
//    private List<String> getDateList(int count)
//    {
//        List<String> dates = new ArrayList<String>();
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  E");
//        Calendar mCalendar = Calendar.getInstance();
//        mCalendar.setTime(new Date());
//        for (int i = 1; i < count; i++)
//        {
//            String ss = sdf.format(mCalendar.getTime());
//            dates.add(ss);
//            mCalendar.add(Calendar.DATE, 1);
//        }
//        return dates;
//    }
//
//    /**
//     * 获取小时数据集
//     *
//     * @param isLimit
//     *            true为限制当前小时之后的时间
//     * @return
//     */
//    private List<String> getHourList(boolean isLimit)
//    {
//        List<String> list = new ArrayList<String>();
//        Calendar mCalendar = Calendar.getInstance();
//        int curHour = mCalendar.get(Calendar.HOUR_OF_DAY);
//        for (int i = 1; i <= 24; i++)
//        {
//            if (i <= curHour && isLimit)
//            {
//                continue;
//            }
//            if (i < 10)
//            {
//                list.add("0" + i);
//            }
//            else if (i == 24)
//            {
//                if (isLimit)
//                {
//                    continue;
//                }
//                list.add("0" + 0);
//            }
//            else
//            {
//                list.add(i + "");
//            }
//        }
//        return list;
//    }
//
//    /**
//     * 获取分钟
//     *
//     * @param num
//     *            分钟间隔
//     * @param isLimit
//     *            true为限制当前分钟之前的时间
//     * @return
//     */
//    private List<String> getminuteList(int num, boolean isLimit)
//    {
//        List<String> list = new ArrayList<String>();
//        Calendar mCalendar = Calendar.getInstance();
//        int curMinute = mCalendar.get(Calendar.MINUTE);
//        for (int i = 0; i < 60; i += num)
//        {
//            if (i < curMinute && isLimit)
//            {
//                continue;
//            }
//            if (i < 10)
//            {
//                list.add("0" + i);
//            }
//            else
//            {
//                list.add(i + "");
//            }
//        }
//        return list;
//    }



    /**
     * 获取时间格式
     * 
     * @return
     */
    @SuppressLint("SimpleDateFormat")
    private SimpleDateFormat getSimpleDateFormat()
    {
        return new SimpleDateFormat("yyyy年MM月dd日  E HH:mm");
    }

    /**
     * 获取当前日期毫秒数
     * 
     * @param dateStr
     * @return
     */
    private long getDateMillis(String dateStr)
    {
        Calendar calendar = new GregorianCalendar();
        try
        {
            Date date = getSimpleDateFormat().parse(dateStr);
            calendar.setTime(date);
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        return calendar.getTimeInMillis();
    }

    /**
     * 获取当前本地时间毫秒数
     * 
     * @return
     */
    private long getCurrentTimeMillis()
    {
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.setTime(new Date());
        return mCalendar.getTimeInMillis();
    }

    /**
     * 设置回调监听器
     */
    public void setDateSelectorPopWindowListener(
            DateSelectorPopWindowListener listener)
    {
        this.mListener = listener;
    }

    /**
     * DateSelector监听器
     */
    public interface DateSelectorPopWindowListener
    {
        /**
         * 选择的日期
         * 
         * @param dateStr
         *            日期字符串
         * @param date
         *            日期毫米数
         */
         void onSelectDate(String dateStr, long date);
    }
}
